Hermes Agent 中的密钥,十几个 API key 堆在一个.env文件里,出事了才知道疼
Hermes Agent 中的密钥,十几个 API key 堆在一个.env文件里,出事了才知道疼
来源:htmlDecode("量子智元")
原文链接:https://mp.weixin.qq.com/s/AKvlhVkPhj5NwnOwuC2uGw
我的 ~/.env 文件有段时间长这样:十几行,每行一个 API key,OpenAI 的、Anthropic 的、各种云服务的,堆在一起。哪天换了密钥,得一个个手动改,改完还担心有没有漏掉哪个地方。
这个问题我拖了很久没处理,直到最近在 Hermes 的文档里看到它接了 Bitwarden Secrets Manager,才认真想了想这件事该怎么弄。
.env 文件的麻烦,说实在的
明文存密钥有几个问题,平时感知不强,出事了才知道疼。
最常见的是 .git 提交。本地 .env 改了什么,一个不注意就跟着 commit 上去,GitHub 上放几分钟就会被爬虫扫到,密钥就算废了。.gitignore 倒是能防,但你得保证每个项目每次都加上。
还有一个是多台机器同步的问题。我有台开发服务器,家里一台 Mac,再加上跑 AI Agent 的那台机器,密钥分散在三个地方,改一个要跑三遍。某次 OpenAI 密钥过期,我改完才发现有台机器忘改了,任务跑了一半报错,查了半天。
问题不是每个都严重,但加在一起就是一个持续的低级摩擦。
密钥中心化是什么思路
解法其实很直接:把所有密钥放到一个专门管密钥的地方,各台机器启动时去那里拉,而不是各自存一份本地文件。
这类工具有个名字叫 secrets manager。企业里用 HashiCorp Vault 的多,个人用的话 Bitwarden Secrets Manager 是个不错的选择,免费计划够用,而且和 Bitwarden 密码管理器是同一个团队做的,信任度还行。
核心逻辑是这样的:你在 Bitwarden 创建一个机器账号(machine account),把所有 API key 存进去,给机器账号生成一个 access token。这个 token 才是唯一放进 .env 的东西。其他密钥,全在 Bitwarden 那边管。
Hermes 是怎么接进去的
Hermes 对这块的处理挺干净。配置文件里加几行,启动时它会自动调用 bws 命令行工具,把 Bitwarden 上的所有密钥拉下来注入到环境变量里。
bws 这个二进制文件也不用自己装,Hermes 第一次用的时候会自动下载到 ~/.hermes/bin/ 里,不需要 apt 或 brew,省了不少事。
配置大概长这样:
# ~/.hermes/config.yaml
secrets:
bitwarden:
enabled: true
access_token_env: BWS_ACCESS_TOKEN # .env 里只放这一个
project_id: "你的 project UUID"
override_existing: true # Bitwarden 优先,本地 .env 让路
然后 ~/.hermes/.env 里只需要一行:
BWS_ACCESS_TOKEN=0.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
每次 hermes 启动,它就去 Bitwarden 拉密钥,塞进 os.environ,后面的工具调用全都能用上。改密钥只需要去 Bitwarden 网页改一次,下次所有机器启动就都生效了。
轮换密钥这件事从此省心了
这个设计真正好用的地方在于密钥轮换。以前改一个密钥,我得记住哪几台机器上有这个 .env,一个个 ssh 进去改。现在只要在 Bitwarden 里改一次,重启 hermes 就完事了。
我之前一直在拖的就是这个——不是不知道该中心化管理,是觉得搭一套 Vault 太重了,Bitwarden 这个方案轻得多,接入成本低,个人项目完全够用。
一个 bootstrap token 换掉 N 个密钥,是个值得推的做法。
不一定要用 Hermes 才能用这个思路
Bitwarden Secrets Manager 有官方的 bws CLI,直接在脚本里调就行,不依赖 Hermes。如果你只是想给某个部署脚本做密钥管理,可以在脚本开头加几行:
#!/bin/bash
启动前从 Bitwarden 拉密钥
eval $(bws secret list $BWS_PROJECT_ID | python3 -c "
import json, sys
for s in json.load(sys.stdin):
print(f'export {s["key"]}={s["value"]}')
")
思路是一样的,换密钥只改 Bitwarden,脚本不动。
我现在的习惯是新项目不再手写多个密钥进 .env,直接往 Bitwarden 里加一条记录。以前懒得弄,试了才发现也就五分钟的事。
⭐点赞、转发、关注和推荐一键三连⭐